﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using UI;
using UI.View;


namespace Let_me_show_you
{
    public partial class TestingForm : Form, IMouseCapturer
    {
        private MouseCapturerPresenter mousecapturerpresenter; // презентер 
        private Record MyRecord; // общая запись для всех действий
        public TestingForm()
        {
            mousecapturerpresenter = new MouseCapturerPresenter(this);
            InitializeComponent();
        }

        
        /// <summary>
        /// Выводит текущие координаты мыши по отношению к форме на экран, вызов происходит по передвижению мыши по форме
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void WriteCoordinates(object sender, MouseEventArgs e)
        {
            int deltaX, deltaY;
            Control ActiveObject = sender as Control;//Предполагаем, что sender - элемент класса Control. Если это не так, то ActiveObject не будет никуда ссылаться(null)
            if (ActiveObject == this || ActiveObject==null)
            /* Если ActiveObject - текущая форма, тогда не нужно дополнительно сдвигать координаты. 
             * Иначе, если объект находится на форме, его абсолютные координаты относительно левого верхнего угла монитора 
             * будут иметь вид: Координаты формы + координаты объекта относитнельно формы. */
            {
                deltaX = 0;
                deltaY = 0;
            }
            else
            {
                deltaX = ActiveObject.Location.X;
                deltaY = ActiveObject.Location.Y;
            }
            XValue.Text = (this.Location.X + deltaX + e.X).ToString();
            YValue.Text = (this.Location.Y + deltaY +e.Y).ToString();
            ObjectValue.Text = ActiveObject.GetType().ToString();
            
        }

        private void MouseClickEveryWhere(object sender, MouseEventArgs e)
        {
            if (e.Button == MouseButtons.Left)
            {
                if (button2.Enabled)
                {
                    MyRecord = new RecordMouseLeftClick(new Point(MousePosition.X, MousePosition.Y));
                    mousecapturerpresenter.AddRecord();
                }
            }
        }

        private void TestingForm_Load(object sender, EventArgs e)
        {
            foreach (Control Control in this.Controls)
            {
                Control.MouseMove += WriteCoordinates;
                Control.MouseClick += MouseClickEveryWhere;
            }
        }

        private void button1_Click(object sender, EventArgs e)
        {
            timer1.Enabled = true; //Включение таймера
            button1.Enabled = false; //  Отключение кнопки "Записать"
            button2.Enabled = true; // Включение кнопки "Стоп"
        }

        private void button2_Click(object sender, EventArgs e)
        {
            timer1.Enabled = false; //Отключение таймера
            button2.Enabled = false; //  Отключение кнопки "Стоп"
            button3.Enabled = true; // Включение кнопки "Воспроизвести"
        }

        private void button3_Click(object sender, EventArgs e)
        {
            timer1.Enabled = true; //Включение таймера
            button3.Enabled = false; //Отключение кнопки "Воспроизвести"
        }

        private void timer1_Tick(object sender, EventArgs e)
        {
            if (button2.Enabled)
            {
            MyRecord = new RecordCoordinates(MousePosition.X, MousePosition.Y);
            mousecapturerpresenter.AddRecord();
            }
            else
            {
                mousecapturerpresenter.ReadRecord();
            }

        }   
 
        public Record GiveRecord()
        {
            return MyRecord;
        }

        public void StopPlay()
        {
            timer1.Enabled = false;
            button1.Enabled = true;
        }

        public void ImitationMouseClick(MouseEventArgs e)
        {
            OnMouseClick(e);
        }

        public void MoveMouse(int x, int y)
        {
            Cursor.Position = new Point(x, y);
        }

        private void textBox1_TextChanged(object sender, EventArgs e)
        {
            
        }

        private void textBox1_MouseClick(object sender, MouseEventArgs e)
        {
            textBox1.Text = textBox1.Text + "1";
        }


    }
}
